function Stu(name) {
    //对象属性的优先级高于原型的属性优先级
    this.age = 25
    this.name = name
}
//构造函数的prototype指向原型

Stu.prototype.age = 20
Stu.prototype.say = function() { console.log(`你好！我是${this.name},今年${this.age}岁呢`) }
    //对象的__proto__指向原型
s1 = new Stu("杨浩")
    //原型的constructor指向构造函数

//构造函数Person
function Person() {}
//Person.prototype指向构造函数的原型
//通过原型去添加属性
Person.prototype.name = "Nicholas";
Person.prototype.age = 29;
Person.prototype.job = "Software Engineer";
Person.prototype.sayName = function() {
    console.log(this.name);
};
//person1.__proto__指向原型
var person1 = new Person();
person1.sayName();
var person2 = new Person(); //"Nicholas"
//person2.__proto__指向原型 __proto__ [[protoytpe]] 是一个概念
person2.sayName();

/* 
通过原型可以动态的给任何对象添加属性或者方法，例如以下案例，给字符串添加属性或者方法
1.字符串的构造函数String
2.String.prototype 指向构造啊和老鼠原型，给原型添加自定义属性或者方法
*/
//给原型添加name属性，那么任何字符串对象都可以访问到这个属性
String.prototype.name = "字符串"

//字符串自定义方法
//这里this可以指向这个字符串
String.prototype.sayName = function() { console.log(`${this},我是一个字符串`) }

Number.prototype.inc = function() { var res = this.valueOf() + 1; return res }